#include <iostream>
#include <string>
using namespace std;

static string ranks[13] = { "Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Knight", "Queen", "King"};
static string suits[4] = { "Hearts", "Spades", "Diamonds", "Clubs"};

class Card {
    public:
    int value, suit;

    Card(int value_, int suit_){
        value = value_; suit = suit_;
    }

    Card(){
    }

    string toString(){
        string info = ranks[value];
        info.append(" of ");
        info.append(suits[suit]);

        return info;
    }
};

class cKeeper {
    public:
    Card *cards[52];

    cKeeper(){
        int counter = 0;
        for(int i=0; i<4; i++)
            for(int j=0; j<13; j++){
                cards[counter++] = new Card(j,i);
            }
    }

    Card* getCard(int index){
        return cards[index];
    }

};

int main(string args[]){

    cKeeper theCards;
    Card *c;

    for(int i = 0; i<52; i++){
        c = theCards.getCard(i);
        cout << c << endl;
        cout << (*c).toString() << endl;
    }

    return 0;
}
